home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_c / cuj0696.zip / DWYER.ZIP / COLISION.TST / COLSNTST.C < prev    next >
C/C++ Source or Header  |  1996-03-30  |  3KB  |  104 lines

  1. /* ============ */
  2. /* colsntst.c    */
  3. /* ============ */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #include <clsndefs.h>
  8. #include <miscdefs.h>
  9.  
  10. #define    NUM_PROBS    100
  11. static    double    ClsnProbs[NUM_PROBS];
  12.  
  13. static    CLSN_DATA_STRU  ClsnData;
  14. static    INIT_DATA_STRU  InitialData;
  15. /* ====================================================================    */
  16. /* CollisionTest - Applies the Collision Test                 */
  17. /* ==================================================================== */
  18. void
  19. main()
  20. {
  21.     /* ----------------------------------------------------------- */
  22.     /* The collision test is applied when the number of categories */
  23.     /* is much greater than the number of observations.           */
  24.     /* ----------------------------------------------------------- */
  25.  
  26.     int     k;
  27.     double  KnMinusProb, KnMinusStat, KnPlusProb, KnPlusStat;
  28.  
  29.     AbortGracefully();            /* Make ^C act reasonably */
  30.  
  31.     printf("\tC O L L I S I O N  T E S T\n\n");
  32.     GetInitialData(&InitialData);
  33.     fprintf(stderr, "\n"); fflush(NULL);
  34.  
  35.     /* -------------------------- */
  36.     /* Print Initial Data Entries */
  37.     /* -------------------------- */
  38.     printf("Starting Seed = %u%s\n", InitialData.UserSeed,
  39.     (InitialData.SeedSrce == (UINT)(-1)) ?
  40.         " (Unsigned Integer Part of Time of Day)" : "");
  41.  
  42.     printf("Generator     = %s\n", InitialData.GenName);
  43.  
  44.     ClsnData.RandFun = InitialData.RandFun;
  45.  
  46.     SetCollisionControls(&ClsnData);
  47.  
  48.     printf("\nNumber of Balls = %u, Number of Urns = %ld\n",
  49.     ClsnData.NumObs, ClsnData.NumCategories);
  50.     printf("\nCalculating Collision-Probability Table\n");
  51.  
  52.     CalcCollisionProbs(&ClsnData);
  53.  
  54.     printf("\n   collisions <=");
  55.     for (k = TMAX-2; k >= 0; --k)
  56.     {
  57.     printf("%7d",    ClsnData.ClsnStats[k]);
  58.     }
  59.     printf("\nwith probability");
  60.     for (k = TMAX-2; k >= 0; --k)
  61.     {
  62.     printf("%7.3f", ClsnData.ClsnProbs[k]);
  63.     }
  64.     printf("\n\n");
  65.  
  66.     /* -------------------------- */
  67.     /* Generate Random Numbers,   */
  68.     /* Calculate Probability Data */
  69.     /* -------------------------- */
  70.     for (k = 0; k < NUM_PROBS; ++k)
  71.     {
  72.     GetCollisionData(&ClsnData);
  73.     ClsnProbs[k] = ClsnData.HitProb;
  74.  
  75.     fprintf(stderr, "\rPass %3d (of %d), %8ld  Total Random Numbers",
  76.         k+1, NUM_PROBS, ClsnData.NumVariates);
  77.  
  78.     P(printf("Number of Collisions      = %u\n",
  79.         ClsnData.NumHits));
  80.     P(printf("Corresponding Probability = %.3f\n",
  81.         ClsnData.HitProb));
  82.     }
  83.  
  84.     /* -------------------------------------------------------- */
  85.     /* Calculate K-S on Chi-Square Statistics and Probabilities */
  86.     /* -------------------------------------------------------- */
  87.     fprintf(stderr, "\n"); fflush(NULL);
  88.     KSCalc(ClsnProbs, NUM_PROBS,
  89.         &KnPlusStat, &KnPlusProb,
  90.          &KnMinusStat, &KnMinusProb);
  91.  
  92.     printf("\nKolmogorov-Smirnov Statistics and Probabilities"
  93.     " on Collision Probability Data\n");
  94.  
  95.     printf("\tK(%d)+ = %f (Knuth) or %9f%%\n", NUM_PROBS,
  96.     sqrt((double)NUM_PROBS)*KnPlusStat, 100*KnPlusProb);
  97.  
  98.     printf("\tK(%d)- = %f (Knuth) or %9f%%\n", NUM_PROBS,
  99.     sqrt((double)NUM_PROBS)*KnMinusStat, 100*KnMinusProb);
  100.  
  101.     printf("\n%d-Dimensional Randomness was Tested\n", ClsnData.NumParts);
  102.     printf("This Run Required %ld Variates\n", ClsnData.NumVariates);
  103. }
  104.